Feat: Add onConnectionClosed callback for external reconnection handling #395
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR introduces a new optional callback, onConnectionClosed, on the Db class. This function is invoked when the underlying MongoDB connection's socket closes, specifically when the socket stream reports either an onError (e.g., network timeout, connection reset) or completes via onDone.
While the ideal long-term solution involves implementing a robust, internal auto-retry and command queue management system, this approach proves highly complex and time-consuming.
Rationale and Usage
This new callback provides an immediate, practical mechanism for client applications to handle unexpected connection loss gracefully:
Application Restart: The most common use case will be allowing application-level logic to trigger a full connection restart or application exit upon a fatal connection error.
State Management: It allows developers to reliably update application state when the connection status changes from active to closed.
By exposing this connection event, we empower library consumers to manage their own reconnection strategy and error handling without requiring complex changes within mongo_dart's core socket logic.
Example (Conceptual)